package com.czh.dao;

import com.czh.dto.UserQueryDTO;
import com.czh.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * (User表数据库访问层
 *
 * @author makejava
 * @since 2024-07-24 17:00:54
 */
@Mapper
public interface UserDao {


    /**
     * 分页数据 查询
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<User> pageList(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);

    /**
     * 根据主键 查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    User findById(Long id);

    /**
     * 动态 查询 多条数据  属性不是null
     *
     * @param user 对象
     * @return 实例对象的集合
     */
    List<User> findList(User user);

    /**
     * 动态 查询 单条数据
     *
     * @param user 对象
     * @return 实例对象
     */
    User findOne(User user);

    /**
     * 查询多条数据
     *
     * @param List<Long> 主键集合
     * @return 实例对象的集合
     */
    List<User> findListByIds(List<Long> list);

    /**
     * 动态 新增 属性不是null更新
     *
     * @param user 实例对象
     * @return 实例对象
     */
    int insertSelective(User user);

    /**
     * 动态 批量 新增  属性不是null更新
     *
     * @param user 实例对象
     * @return 实例对象
     */
    int insertSelectiveBatch(List<User> list);

    /**
     * 动态 修改 属性不是null更新
     *
     * @param user 实例对象
     * @return 实例对象
     */
    int updateSelective(User user);

    /**
     * 动态 批量 修改  属性不是null更新
     *
     * @param where 对象
     * @param set对象
     * @return int
     */
    int updateSelectiveByField(@Param("where") User where, @Param("set") User set);

    /**
     * 动态 批量 修改  属性不是null更新
     *
     * @param List<User)> 实例对象集合
     * @return int
     */
    int updateSelectiveBatchByIds(List<User> list);

    /**
     * 删除
     *
     * @param id 主键
     * @return int
     */
    int deleteById(Long id);

    /**
     * 动态 删除 属性不是null更新
     *
     * @param User 实例对象
     * @return int
     */
    int deleteSelective(User user);

    /**
     * 删除
     *
     * @param List<Long> 主键集合
     * @return int
     */
    int deleteByIds(List<Long> list);

    /**
     * 查询总数
     *
     * @return int
     */
    int countAll();

    /**
     * 动态 查询 总数
     *
     * @param User 实例对象
     * @return int
     */
    int countSelective(User user);

    @Select("select id, name, password, age, happies, create_time as createTime, update_time as updateTime from t_user limit #{page},#{size}")
    List<User> pageBySimple(@Param("page") int page, @Param("size") int size);


    List<User> pageByCustom(UserQueryDTO userQueryDTO);

    Integer selectSize(UserQueryDTO userQueryDTO);

    List<User> listByCondition(UserQueryDTO userQueryDTO);
}

